package com.hongqiang.shop.modules.entity;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.PreRemove;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
@Entity
@Table(name="hq_admin")
public class Admin extends BaseEntity
{
private static final long serialVersionUID = -7519486823153844426L;
private String username;
private String password;
private String email;
private String name;
private String department;
private Boolean isEnabled;
private Boolean isLocked;
private Integer loginFailureCount;
private Date lockedDate;
private Date loginDate;
private String loginIp;
private Set<Role> roles = new HashSet<Role>();
private Set<Order> orders = new HashSet<Order>();
@NotEmpty(groups={BaseEntity.Save.class})
@Pattern(regexp="^[0-9a-z_A-Z\\u4e00-\\u9fa5]+$")
@Length(min=2, max=20)
@Column(nullable=false, updatable=false, unique=true)
public String getUsername()
{
return this.username;
}
public void setUsername(String username)
{
this.username = username;
}
@NotEmpty(groups={BaseEntity.Save.class})
@Pattern(regexp="^[^\\s&\"<>]+$")
@Length(min=4, max=40)
@Column(nullable=false)
public String getPassword()
{
return this.password;
}
public void setPassword(String password)
{
this.password = password;
}
@NotEmpty
@Email
@Length(max=200)
@Column(nullable=false)
public String getEmail()
{
return this.email;
}
public void setEmail(String email)
{
this.email = email;
}
@Length(max=200)
public String getName()
{
return this.name;
}
public void setName(String name)
{
this.name = name;
}
@Length(max=200)
public String getDepartment()
{
return this.department;
}
public void setDepartment(String department)
{
this.department = department;
}
@NotNull
@Column(nullable=false)
public Boolean getIsEnabled()
{
return this.isEnabled;
}
public void setIsEnabled(Boolean isEnabled)
{
this.isEnabled = isEnabled;
}
@Column(nullable=false)
public Boolean getIsLocked()
{
return this.isLocked;
}
public void setIsLocked(Boolean isLocked)
{
this.isLocked = isLocked;
}
@Column(nullable=false)
public Integer getLoginFailureCount()
{
return this.loginFailureCount;
}
public void setLoginFailureCount(Integer loginFailureCount)
{
this.loginFailureCount = loginFailureCount;
}
public Date getLockedDate()
{
return this.lockedDate;
}
public void setLockedDate(Date lockedDate)
{
this.lockedDate = lockedDate;
}
public Date getLoginDate()
{
return this.loginDate;
}
public void setLoginDate(Date loginDate)
{
this.loginDate = loginDate;
}
public String getLoginIp()
{
return this.loginIp;
}
public void setLoginIp(String loginIp)
{
this.loginIp = loginIp;
}
@NotEmpty
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name="hq_admin_role")
public Set<Role> getRoles()
{
return this.roles;
}
public void setRoles(Set<Role> roles)
{
this.roles = roles;
}
@OneToMany(mappedBy="operator", fetch=FetchType.LAZY)
public Set<Order> getOrders()
{
return this.orders;
}
public void setOrders(Set<Order> orders)
{
this.orders = orders;
}
@PreRemove
public void preRemove()
{
Set<Order> localSet = getOrders();
if (localSet != null)
{
Iterator<Order> localIterator = localSet.iterator();
while (localIterator.hasNext())
{
Order localOrder = (Order)localIterator.next();
localOrder.setLockExpire(null);
localOrder.setOperator(null);
}
}
}
}